package com.blog.bean.domain;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;

import java.time.LocalDateTime;

/**
 * @author 任浩
 * @version 1.0
 */

@Data
@AllArgsConstructor
@NoArgsConstructor
@Document(indexName = "discusspost",shards = 6,replicas = 3) // 这是指定创建存入数据时，indexName存放的索引名字。 // shards 是指定分片个数, replicas指定副本个数。
public class DiscussPost {
    //必须有 id,这里的 id 是全局唯一的标识，等同于 es 中的"_id"
    /**
     * 这里设置在属性上的注解都是为ElasticSearch服务的。
     */
    @Id
    private Integer id;  //帖子id

    @Field(type = FieldType.Integer)  //type相当于就是设置当前字段的映射关系，提取设置好字段的规则。
    private String userId;  //代表当前帖子是哪个用户发的

    /**
     * type : 字段数据类型
     * analyzer : 分词器类型
     * index : 是否索引(默认:true)
     * Keyword : 短语,不进行分词
     */
    //这样title和content的内容要好好设置，因为我们搜索就是根据标题和内容来进行搜索的。
    @Field(type = FieldType.Text,analyzer = "ik_max_word",searchAnalyzer = "ik_smart")  //这里的analyzer是指定分词器，
                                                                //就是把我们要根据搜索的字段进行拆分，如果我们满足，就能够进行搜索。
                                                                //比如互联网校招，可以拆分成，互联网，校招等词语来搜索。
    private String title; //帖子的标题

    @Field(type = FieldType.Text,analyzer = "ik_max_word",searchAnalyzer = "ik_smart")
    private String content; //帖子的内容

    @Field(type = FieldType.Integer)
    private Integer type;  //帖子的类型  0-普通; 1-置顶

    @Field(type = FieldType.Integer)
    private Integer status;  //帖子的状态  0-正常; 1-精华; 2-拉黑

    @Field(type = FieldType.Date)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime; //发帖时间

    @Field(type = FieldType.Integer)
    private Integer commentCount; //评论数

    @Field(type = FieldType.Double)
    private double score ; //当前帖子的分数，就是根据分数类排序，热度之类的。

    private Integer viewCount;
}
